package 多线程初阶1;
//标准库中(集合类)的线程安全的类
//也是常见面试题...
/**
 * 这里的集合类,大部分是线程不安全的.(不能在多线程环境下去并发修改同一个对象)
 * ArrayList/LinkedList/HashMap/HashSet...都是线程不安全的.
 *
 * 还有一些是线程安全的.
 * Vector(在最新版本的Java16已经被删了,很早就标记成"弃用"状态了)
 * 这个是JDK早期内置的集合类.这里的设计不是特别科学.
 * 后续的编程中,一般都不建议使用Vector,而是使用ArrayList来代替.
 *
 * Vector也是一个顺序表(动态数组),能自动扩容啥的...
 * Vector使用sychronized来保证了线程安全(给这里很多方法都加上了synchronized来继续是)
 *
 * 注意!这种操作并不好!!
 * 大多数情况下并不需要在多线程中使用Vector,而如果我们加了太多synchronized就会对单线程环境下的操作的效率造成负面影响.(synchronized的特性,刷新内存)
 *
 * 和Vector类似,还有一个HashTable,是一个哈希表结果.也是类似的做法,给里面很多方法都加了synchronized
 *
 * Stack(栈)继承自Vector,也是线程安全的
 *
 * (ConcurrentHashMap也是一个线程安全的哈希表,相比于HashTable来说,就设计得非常好了)
 *
 * StringBuffer
 *
 * String认为也是线程安全的.但是又没有加锁.
 * String是不可变对象,不可能存在两个线程并发的修改同一个String.
 * String从不可变的角度保证了线程安全
 *
 *  但是话又说回来了,
 *  有的编程语言,比如lisp,erlang,就是通过"不可变"来保证线程安全的
 */
public class TestDemo3 {
    public static void main(String[] args) {

    }
}
